public class Node(){
    public int value;
    public Node next;

    public Node(int data){
        this.value=data;
    }
}

public Node addList1(Node head1,Node head2){
    Stack<Integer> s1=new Stack<>();
    Stack<Integer> s2=new Stack<>();

    while(head1!=null){
        s1.push(head1.value);
        head1=head1.next;
    }
    
    while(head2!=null){
        s2.push(head1.value);
        head2=head2.next;
    }

    int ca,n1,n2,n=0
    Node node=null;
    Node pre=null;
    while(!s1.isEmpty()||!s2.isEmpty()){
        n1=s1.isEmpty()?0:s1.pop();
        n2=s2.isEmpty()?0:s2.pop();
        n=n1+n2+ca;
        pre=node;
        node=new Node(n%10);
        node.next=pre;
        ca=n/10; 
    }

    if(ca==1){
        pre=node;
        node=new Node(1);
        node.next=pre;
    }
    return node;
}
